#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <linux/rtc.h>
#include <sys/time.h>

int main() {
    int rtc_fd;
    struct rtc_time rtc_tm1, rtc_tm2;
    time_t start_time, end_time;
    
    // 打开 RTC 设备文件
    rtc_fd = open("/dev/rtc0", O_RDONLY);
    if (rtc_fd < 0) {
        perror("打开 RTC 设备文件失败");
        return 1;
    }

    // 读取起始时刻 RTC 时间
    if (ioctl(rtc_fd, RTC_RD_TIME, &rtc_tm1) == -1) {
        perror("读取 RTC 起始时刻时间失败");
        close(rtc_fd);
        return 1;
    }

    // 关闭 RTC 设备文件
    close(rtc_fd);

    // 休眠 3 秒后再次读取 RTC 时间
    sleep(3);

    // 再次打开 RTC 设备文件
    rtc_fd = open("/dev/rtc0", O_RDONLY);
    if (rtc_fd < 0) {
        perror("打开 RTC 设备文件失败");
        return 1;
    }

    // 读取结束时刻 RTC 时间
    if (ioctl(rtc_fd, RTC_RD_TIME, &rtc_tm2) == -1) {
        perror("读取 RTC 结束时刻时间失败");
        close(rtc_fd);
        return 1;
    }

    // 关闭 RTC 设备文件
    close(rtc_fd);

    // 计算时间间隔
    start_time = rtc_tm1.tm_sec + 60 * rtc_tm1.tm_min + 3600 * rtc_tm1.tm_hour;
    end_time = rtc_tm2.tm_sec + 60 * rtc_tm2.tm_min + 3600 * rtc_tm2.tm_hour;

    // 检查时间差是否为 3 秒
    if (end_time - start_time == 3) {
    printf("rtc 测试成功\n");
    system("echo \"$(date)：RTC 测试成功\" >> /userfs/all.txt");
} else {
    printf("rtc 测试失败\n");
    system("echo \"$(date)：RTC 测试失败\" >> /userfs/all.txt");
}


    return 0;
}
